#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=5e5+5;
int n,k[N],c,b[N],nans;
int anss;
vector<int> vec[N];
int t[N*10],tott;
int cntl;
int w[N];
struct node
{
    int x,len;
}pos[N*3];
int cnt,ncnt[N*3];
vector<int> ansv;
signed main()
{
    freopen("list.in","r",stdin);
    freopen("list.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    cin>>n;
    for(int k,i=1;i<=n;i++)
    {
        cin>>k; int na;
        cntl+=k;
        while(k--) cin>>na,vec[i].push_back(na),t[++tott]=na;
    }
    sort(t+1,t+1+tott); tott=unique(t+1,t+1+tott)-t-1;
    for(int i=1;i<=n;i++)
    {
        int la=-1;
        for(int &p:vec[i])
        {
            p=lower_bound(t+1,t+1+tott,p)-t; ncnt[p]++;
            if(la!=-1) pos[++cnt]=node{p,t[p]-t[la]+1};
            la=p;
        }
    }
    sort(pos+1,pos+1+cnt,[](node a,node b){return a.len<b.len;});
    cin>>c; for(int i=1;i<=n;i++) cin>>b[i],w[i]=b[i]*i;
    for(int i=1;i<=tott;i++)
        nans+=w[ncnt[i]]+ncnt[i]*c;
    anss=nans; ansv.push_back(1);
    pos[0].len=1;
    for(int i=1;i<=cnt;i++)
    {
        int j=i;
        while(j!=cnt&&pos[j+1].len==pos[j].len) j++;
        for(int k=i;k<=j;k++)
        {
            nans-=w[ncnt[pos[k].x]];
            ncnt[pos[k].x]--;
            nans+=w[ncnt[pos[k].x]];
            cntl--;
        }
        // if(pos[i].len==359913534)
        // {
            // for(int i=1;i<=tott;i++)
            //     if(ncnt[i]!=0) cout<<t[i]<<' '<<ncnt[i]<<'\n';
            // cout<<nans<<'\n';
        // }
        nans+=(pos[i].len-pos[i-1].len-1)*c*(j-i+1);
        nans+=(pos[i].len-pos[i-1].len)*c*cntl;
        i=j;
        if(nans<anss) ansv.clear(),ansv.push_back(pos[i].len);
        else if(nans==anss) ansv.push_back(pos[i].len);
        anss=min(anss,nans);
    }
    cout<<anss<<' '<<ansv.size()<<'\n';
    for(int p:ansv) cout<<p<<' '; cout<<'\n';
}